package com.ltmall.api.pay.zfb;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class PayUtils {
    public static final int SDK_ALIPAY_FLAG = 1;
    public static final int SDK_WXPAY_FLAG = 2;
    public static final int SDK_WXPAY_FAIL = -1;
    // 商户PID
    public static final String PARTNER = "2088221519520263";
    // 商户收款账号
    public static final String SELLER = "407895006@qq.com";

    /**
     * 关于以下密钥说明！支付宝为了安全起见启用了两对密钥！两对密钥！两对密钥！支付成功回调时使用支付宝公钥验证！！！
     **/

    // 商户私钥，pkcs8格式
    public static final String APP_PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOWTrYj0aM29eVqs 8gyl4/BYGMIM+MnXeoTbMJ8zRX+djvuLQkmxkF1BGl2MFM46c1IgRfZtjD8PaV7p eo87MSJnIoZ6Y5a8I8JAzleeQGM5v+p/Mxwq1y1n7uH78mgsXv1EmMKRBK1hdWdm O2xqqjSqHtMcUR1l0c7NklcpaM3PAgMBAAECgYEAyZhFgYcF5Oyl/N7zafHeV/Y0 P2p+qVeDadjEOHggZjCoFvExk17OI2WAznas6m9fRtW6Oev2hIV3BPZHPjE/MYm+yDDVjjnROR4rwaUIZ2+w95KttpT58C35Ie1Qvy1dpBoDObfXgPISM2EI1rQ+x+1Fdw+wqkEztAp4F91iy1kCQQD3Xa6piYQ/Dsq87u30diCw5ncK3RQdSVj7gYaI4iHh cKAnTOlRbab1SSjgsXqLC8tAu/jkTRz+YHqA6S1h9FUrAkEA7ZcK8n8ADYcd+oHX ghMfUPizIC9KEX4zsMVPpDcX6vVC1uGhnv5RRwKoowNLHdl6BGo9XRpfbBCTbPpK lFFf7QJAYiHBG7LZSubEWQV0UunV+DfFfALOavvhGA1/YKhNBpFWh6DEYrBcbqxy Ugk2cxjfrjOj/nX1DZkaoC9g+J4kdwJAW6/dRqWiFJZfCExRKV5NyIahQbteHxAP zJjoWhv0u/R4Hcqm/19vaDLrdzUPKO7DOq7xDVvfFSn0aqrQWxpoJQJAPxQdzgLK c +lLFA9f94RgSw7PuuPmIBUBGRacp+Usyh9JHGnyyW2itY2S412nOHhQSzVV9lGa vRrUbYGR/lEG4w==";
    // 商户公钥
    public static final String APP_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlk62I9GjNvXlarPIMpePwWBjC DPjJ13qE2zCfM0V/nY77i0JJsZBdQRpdjBTOOnNSIEX2bYw/D2le6XqPOzEiZyKG emOWvCPCQM5XnkBjOb/qfzMcKtctZ+7h+/JoLF79RJjCkQStYXVnZjtsaqo0qh7T HFEdZdHOzZJXKWjNzwIDAQAB";
    // 支付宝公钥
    public static final String ALIPAY_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB";

    // 微信AppID
    public static final String WX_APP_ID = "wx46e1d4377e2b58e6";
    // 微信支付商户号

    public static final String WX_PARTNER_ID = "1336857501";
    // 安全校验码（MD5）密钥，
    public static final String WX_KEY = "homeflaour1234567890123456789012";

    public static String getSign(String orderName, String orderDesc, String money, String notifyUrl, String orderID) {
        String orderInfo = getOrderInfo(orderName, orderDesc, money, notifyUrl, orderID);
        /**
         * 特别注意，这里的签名逻辑需要放在服务端，切勿将私钥泄露在代码中！
         */
        String sign = SignUtils.signAlipay(orderInfo);
        try {
            /**
             * 仅需对sign 做URL编码
             */
            sign = URLEncoder.encode(sign, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        /**
         * 完整的符合支付宝参数规范的订单信息
         */
        return orderInfo + "&sign=\"" + sign + "\"&" + getSignType();
    }

    /**
     * get the sign type we use. 获取签名方式
     */
    private static String getSignType() {
        return "sign_type=\"RSA\"";
    }

    /**
     * create the order info. 创建订单信息
     */
    private static String getOrderInfo(String subject, String body, String price, String notifyUrl, String orderID) {

        // 签约合作者身份ID
        String orderInfo = "partner=" + "\"" + PARTNER + "\"";

        // 签约卖家支付宝账号
        orderInfo += "&seller_id=" + "\"" + SELLER + "\"";

        // 商户网站唯一订单号
        orderInfo += "&out_trade_no=" + "\"" + orderID + "\"";

        // 商品名称
        orderInfo += "&subject=" + "\"" + subject + "\"";

        // 商品详情
        orderInfo += "&body=" + "\"" + body + "\"";

        // 商品金额
        orderInfo += "&total_fee=" + "\"" + price + "\"";

        // 服务器异步通知页面路径
        orderInfo += "&notify_url=" + "\"" + notifyUrl + "\"";

        // 服务接口名称， 固定值
        orderInfo += "&service=\"mobile.securitypay.pay\"";

        // 支付类型， 固定值
        orderInfo += "&payment_type=\"1\"";

        // 参数编码， 固定值
        orderInfo += "&_input_charset=\"utf-8\"";

        // 设置未付款交易的超时时间
        // 默认30分钟，一旦超时，该笔交易就会自动被关闭。
        // 取值范围：1m～15d。
        // m-分钟，h-小时，d-天，1c-当天（无论交易何时创建，都在0点关闭）。
        // 该参数数值不接受小数点，如1.5h，可转换为90m。
        orderInfo += "&it_b_pay=\"30m\"";

        // extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
        // orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

        // 支付宝处理完请求后，当前页面跳转到商户指定页面的路径，可空
        orderInfo += "&return_url=\"m.alipay.com\"";

        // 调用银行卡支付，需配置此参数，参与签名， 固定值 （需要签约《无线银行卡快捷支付》才能使用）
        // orderInfo += "&paymethod=\"expressGateway\"";

        return orderInfo;
    }

}